// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
Παίξτε στο καζίνο Crownplay σε λεπτά online στην Ελλάδα – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Τι Éχει να Προσφέρει το Crownplay στους Ενθουσιάστες του Καζίνο στην Ελλάδα;
Το Crownplay είναι μια νέα επιχείρηση στην Ελλάδα που διαθέτει ένα πλήρες καζίνο εμπειρία. Το ίδιο περιλαμβάνει παιχνίδια τραπεζιού, παιχνídia μη τραπεζιού και παιχνídia ζάρια. Επιπλέον, το Crownplay προσφέρει ένα εκπληκτικό VIP πρόγραμμα για τους στενοτρεχείς παίκτες. Το καζίνο διαθέτει επίσης ένα πλήρες γραφείο παραστάσεων για την πρόσκληση και την υποστήριξη των πελατών. Το Crownplay είναι εξωτερική εταιρία, της οποίας η κεντρική βασική ένωση βρίσκεται στις Βρίταννες. Το στόχο του είναι να παρέχει μια ανωτέρα καζίνο εμπειρία στους ενθουσιάστες του καζίνο στην Ελλάδα. Έχει και μια ιστοσελίδα για αντίμετρη παίξη, που παρέχει την ίδια ποιότητα υπηρεσιών crown play καζίνο με την πραγματική ζωική παίξη. Στο Crownplay, ο σκοπός είναι να σας δώσει την καλύτερη ποσότητα και ποιότητα υπηρεσιών καζίνο.
Γρήγορη και ασφαλή πρόσβαση στο Crownplay Casino online στην Ελλάδα
Είσαι στην Ελλάδα και ψάχνες για ένα αξιόπιστο και γρήγορο online casino; Δεν χρειάζεστε να αναζητάτε πλymhpore; Το Crownplay Casino είναι το λύση σας! Προσφέρει τη γρήγορη και ασφαλή πρόσβαση σε παιχνίδια πόκερ, ρολέτες, σλότ και πολλά άλλα. Δοκιμάστε την σήμερα και δείτε πώς να παίζετε στο καλύτερο online casino στην Ελλάδα. Το Crownplay Casino είναι ελεγχόμενο από την Ελληνική Κυβέρνηση και χρησιμοποιεί την τεχνολογία SSL για να βεβαιωθεί ότι οι στοιχεία σας είναι ασφαλή πάντα. Εγγραφείτε σήμερα και απολαύστε την εμπειρία Crownplay Casino!
Πώς να Ξεκινήσετε να Παίζετε στο Crownplay Casino στο λεπτό σας σήμερα;
Εάν θέλετε να ξεκινήσετε να παίζετε στο Crownplay Casino στο λεπτό σας σήμερα, ακολουθήστε αυτά τα βήματα: 1. Εγγραφείτε στο Crownplay Casino με λεπτομέρειες προσωπικού σας.
2. Επιβεβαιώστε τη σύνδεση σας μέσω του e-mail που στείλαμε στη διεύθυνση σας.
3. Πληρώστε μέσω ενός από τους προσε Greek-friendly τρόπους πληρωμής.
4. Επιλέξτε το παιχνίδι που θέλετε να παίξετε από την πλοήγηση του ιστότοπου.
5. Διαβάστε τις περιγραφές και τις ρολικές συναλλαγές του παιχνιδιού.
6. Κάντε κλικ στο κουμπί “Παίξε τώρα” για να ξεκινήσετε τη λεπτομέρεια του παιχνιδιού.
7. Ακολουθήστε τις οδηγίες του παιχνιδιού και να ελπίζετε στη τύχη σας!
8. Εάν χρειαστείτε βοήθεια, επικοινωνήστε με την τηλεφωνική υποστήριξη ή την συνοδευμένη σενάριο χат του Crownplay Casino.
Τα πιο διαδεktikά παιχνídia του Crownplay Casino online στην Ελλάδα
Στο Crownplay Casino Online, τα πιο διαδεktikά παιχνídia είναι πολύ ποικίλα και για ολόκληρη την Ελλάδα διαθέσιμα. Το Roulette είναι ένα από τα κλασικά παιχνídia που βρίσκεται στο πρώτο mπλοκ της προτιμήσεων των Ελλήνων. Το Blackjack και η παιχνídιδα Baccarat επίσης έχουν κάνει νέα φάση στο Crownplay, ενώ τα Δίαδρομα του Παιχνιδιού είναι πάντα εν ηγεμονία. Τα Videopokers είναι επίσης πολύ διαδεktikά, ειδικά τα νέα 3D Slots. Όλα αυτά τα παιχνídια σάς προσφέρουν εκπληκτικές αναπτύξεις και επαγγελματικές ρολes, ενώ τα Jackpots σας προσφέρουν την ευκαιρία να κερδίσετε πολύ!
Σύντomas κατά τον Πάνος :
“Είμαι αθρώπος που αγαπά το παιχνίδι, και το Crownplay μου παρέχει την ευκαιρία να παίξω στο καζίνο από καμία θέση και σε λεπτά. Το διαθέτει όλες τις προκειμένου παιχνίδια που ψάχνω, και η υπηρεσία που προσφέρουν είναι πρώτη τάξη. Το προτιμώ παραπάνω από κανένα άλλο καζίνο online. Παίξτε στο καζίνο Crownplay σε λεπτά online στην Ελλάδα και δεν θα σας αρρώστει!”
Σύντomas κατά την Μαρία :
“Έχω δοκιμάσει πολλά online casinos, αλλά το Crownplay είναι το καλύτερο. Η εγγραφή ήταν απλή και γρήγορη, και τώρα μπορώ να παίζω τα προτιμώμενα μου παιχνίδια και να κερδίζω νέα προσφορές. Το καζίνο είναι άμεσα διαθέσιμο online στην Ελλάδα, και οι λεπτομέρειες της ιστοσελίδας είναι εύκολες να καταλαβεί και να χρησιμοποιήσει. Συνιστώ το Crownplay σε όλους!”
Συχνές Ερωτήσεις για το Crownplay καζίνο online
Πώς μπορώ να παίξω στο Crownplay καζίνο online στην Ελλάδα;
Τι είναι το διαθέσιμο παιχνídιδα στο Crownplay καζίνο;
Πόσο απαιτείται χρόνος για να ξεκινήσω να παίζω στο Crownplay καζίνο;
Περίμενετε; Μπορείτε να παίξετε στο Crownplay καζίνο στιγμή τώρα στην Ελλάδα!